home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / brutil.arc / COMBINE.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-06-01  |  3.0 KB  |  178 lines

  1. BUFSIZE EQU    32768
  2. CODE    SEGMENT
  3.     ASSUME    CS:CODE,DS:CODE
  4.     ORG    100H
  5. START:    MOV    SI,81H
  6.     MOV    AL,' '
  7. LOOP1:    MOV    NFLAG,AL
  8.     LODSB
  9.     CMP    AL,' '
  10.     JZ    LOOP1
  11.     CMP    AL,'-'
  12.     JZ    PREFIX
  13.     CMP    AL,'+'
  14.     JZ    SUFFIX
  15.     CMP    AL,13
  16.     JZ    OKTEST
  17.     MOV    DX,OFFSET ERRMSG
  18.     MOV    CX,offset (ERREND-ERRMSG)
  19. ERRXIT: MOV    BX,2
  20.     MOV    AH,64
  21.     INT    21H
  22.     MOV    AX,4C01H
  23.     INT    21H
  24. PREFIX: SUB    BX,BX
  25.     JMP    SHORT COMFIX
  26. SUFFIX: MOV    BX,258
  27. COMFIX: CMP    BYTE PTR NFLAG,' '
  28.     JNZ    NOCT
  29.     INC    BYTE PTR COUNTER
  30. NOCT:    MOV    CL,COUNTER
  31.     MOV    DI,OFFSET STR1
  32. LOOP5:    DEC    CL
  33.     JZ    NOADD
  34.     ADD    DI,516
  35.     JMP    LOOP5
  36. NOADD:    MOV    CX,0
  37.     CMP    BYTE PTR NFLAG,' '
  38.     JNZ    NOINIT
  39.     MOV    WORD PTR [DI],0
  40.     MOV    WORD PTR 258[DI],0
  41. NOINIT: ADD    DI,BX
  42.     PUSH    DI
  43.     INC    DI
  44.     INC    DI
  45.     LODSB
  46.     CMP    AL,'"'
  47.     JNZ    BADCHR
  48. LOOP2:    LODSB
  49.     CMP    AL,13
  50.     JZ    BADCHR
  51.     CMP    AL,'"'
  52.     JZ    ENDFIX
  53. LOOP4:    STOSB
  54.     INC    CX
  55.     JMP    LOOP2
  56. ENDFIX: LODSB
  57.     CMP    AL,'"'
  58.     JZ    LOOP4
  59.     DEC    SI
  60.     DEC    SI
  61.     LODSB
  62.     POP    DI
  63.     MOV    [DI],CX
  64.     JMP    LOOP1
  65. BADCHR: MOV    DX,OFFSET CHRMSG
  66.     MOV    CX,OFFSET (CHREND-CHRMSG)
  67.     JMP    ERRXIT
  68. OKTEST: CMP    BYTE PTR COUNTER,0
  69.     JZ    BADCHR
  70. OKT1:    MOV    CX,0
  71.     MOV    DI,OFFSET STR3+2
  72.     MOV    BYTE PTR CURRENT,1
  73. LOOP3:    CALL    GETCHR
  74.     JZ    OKXIT
  75.     CMP    AL,13
  76.     JZ    ENDLIN
  77.     STOSB
  78.     INC    CX
  79.     JMP    LOOP3
  80. OKXIT:    MOV    AX,4C00H
  81.     INT    21H
  82. ENDLIN: CALL    GETCHR
  83.     CMP    AL,10
  84.     JZ    BYPLF
  85.     MOV    WORD PTR STR4,1
  86. BYPLF:    MOV    STR3,CX
  87. REPEAT: PUSH    SI
  88.     MOV    SI,OFFSET STR1
  89.     CALL    GETADR
  90.     JZ    NOT1
  91.     CALL    PUTLIN
  92. NOT1:    MOV    CX,STR3
  93.     OR    CX,CX
  94.     JZ    NOT3
  95.     MOV    DX,OFFSET STR3+2
  96.     CALL    PUTLIN
  97. NOT3:    MOV    SI,OFFSET STR2
  98.     CALL    GETADR
  99.     JZ    NOT2
  100.     CALL    PUTLIN
  101. NOT2:    MOV    CX,STR4
  102.     MOV    DX,OFFSET STR4+2
  103.     CALL    PUTLIN
  104.     POP    SI
  105.     INC    BYTE PTR CURRENT
  106.     MOV    AL,CURRENT
  107.     CMP    AL,COUNTER
  108.     JNA    REPEAT
  109.     JMP    OKT1
  110. GETCHR: CMP    WORD PTR STR4,1
  111.     JNZ    NOPREV
  112.     MOV    AL,LASTCH
  113.     MOV    WORD PTR STR4,2
  114.     JMP    SHORT NOREAD
  115. NOPREV: PUSH    CX
  116.     MOV    CX,BUFLEFT
  117.     OR    CX,CX
  118.     JNZ    RDCHR
  119.     SUB    BX,BX
  120.     MOV    CX,BUFSIZE
  121.     MOV    DX,OFFSET CHAR
  122.     MOV    AH,63
  123.     INT    21H
  124.     OR    AX,AX
  125.     POP    CX
  126.     JZ    GETXIT
  127.     MOV    SI,OFFSET CHAR
  128.     PUSH    CX
  129.     MOV    CX,AX
  130. RDCHR:    LODSB
  131.     DEC    CX
  132.     MOV    BUFLEFT,CX
  133.     POP    CX
  134.     MOV    LASTCH,AL
  135. NOREAD: CMP    AL,26
  136. GETXIT: RET
  137. GETADR: MOV    CL,CURRENT
  138. GA1:    DEC    CL
  139.     JZ    GA2
  140.     ADD    SI,516
  141.     JMP    GA1
  142. GA2:    LODSW
  143.     OR    AX,AX
  144.     MOV    CX,AX
  145.     MOV    DX,SI
  146.     RET
  147. PUTLIN: MOV    BX,1
  148.     MOV    AH,64
  149.     INT    21H
  150.     RET
  151. CHRMSG    DB    'Incorrect calling sequence',13,10,10
  152. ERRMSG    DB    'Syntax: COMBINE [-"str1"][+"str2"]'
  153.     DB    '[ [+"str3"][-"str4"]] ...',13,10,10
  154.     DB    '- for prefix string',13,10
  155.     DB    '+ for suffix string',13,10,10
  156.     DB    'Prefix and suffix strings with no spaces between them',13,10
  157.     DB    'are treated as matched sets.  One or more spaces',13,10
  158.     DB    'separate sets.  Each set is used to construct a line',13,10
  159.     DB    'of output for each input line.  If there are two sets,',13,10
  160.     DB    'there will be two lines in the output for each input',13,10
  161.     DB    'line (one for each set).',13,10
  162. ERREND    LABEL    BYTE
  163. CHREND    LABEL    BYTE
  164. NFLAG    DB    ?
  165. COUNTER DB    0
  166. CURRENT DB    0
  167. BUFLEFT DW    0
  168. LASTCH    DB    ?
  169. STR4    DW    2
  170.     DB    13,10
  171. STR1    LABEL    WORD
  172. STR2    EQU    STR1+258
  173. STR3    EQU    STR1+(516*25)
  174. CHAR    EQU    STR3+512
  175. CODE    ENDS
  176.     END    START
  177. ?
  178. ST